package Thread;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Java 标准库中线程池的使用
 */

public class Demo33 {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService service = Executors.newFixedThreadPool(4);
        for(int i = 0;i < 100;i ++){
            //对于 lambda 表达式来说,这个 i 是一个外部变量
            //由于在 for 中 i 在持续变化,多以在下面的打印中 i 的值与想打出来的值不一定一样
            int id = i;
            service.submit(()->{
                //线程池的作用是用来打印 id
                Thread current = Thread.currentThread();
                System.out.println("hello thread" + id + "," + current.getName());
            });
        }

        //最好不要立即就终止,防止任务没有执行完,线程就被终止了
        Thread.sleep(2000);

        //把线程池中的所有线程都终止掉
        service.shutdown();
        System.out.println("程序退出");
    }
}
